Value Object
string, int, mapなどプログラミング言語がデフォルトで提供する属性や型をそのまま使うのではなく、対象ドメインの語彙で名前をつけてバリューオブジェクトとして括りだします。後述のエンティティからバリューオブジェクトを切り出すことができれば、エンティティの複雑さを軽減することができます。バリューオブジェクトは状態不変で副作用なしにして、メソッドを組み合わせて使っても動作が推測しやすくしておきます。 バリューオブジェクトは後述のエンティティと違って、一意性の保証は不要です。